
// 引入axios
import axios from 'axios'
// 引入vuex
import store from '@/store'
// 引入路由
import router from '@/router'
// 定义路径
// export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'
export const baseURL = 'https://apipc-xiaotuxian-front.itheima.net/'
// 创建axios实例
const instance = axios.create({
  // 配置路径
  baseURL,
  //   设置请求超时为10秒
  timeout: 10000
})
// 设置请求拦截器
instance.interceptors.request.use(config => {
  // 获取vuex的user模块的用户信息
  const { profile } = store.state.user
  //   判断是否有token
  if (profile.token) {
    //   如果有配置请求头
    config.headers.Authorization = `Bearer ${profile.token}`
  }
  //   返回配置
  return config
}, err => {
  // 如果错误，返回错误
  return Promise.reject(err)
})
// 设置响应拦截器，res=>res.data取出data数据，将来调用接口时直接拿到的就是后台数据
instance.interceptors.response.use(res => res.data, err => {
  // 如果有错误状态码且状态码为401
  if (err.response && err.response.status === 401) {
    //   清空当前用户的信息
    store.commit('user/setUser', {})
    // 记录当前用户要跳转的路径
    const fullPath = encodeURIComponent(router.currentRoute.value.fullPath)
    // 跳转到登录页并把记录的路径存到rediretUrl里
    router.push('/login?redirectUrl=' + fullPath)
  }
  //   返回错误i
  return Promise.reject(err)
})

export default (url, method, submitData) => {
  // 默认导出这个配置
  return instance({
    url,
    method,
    // 三元表达式，先将method转小写，如果method等于get的话则key是params，否则是data，！！【中括号可以动态取key】
    [method.toLowerCase() === 'get' ? 'params' : 'data']: submitData
  })
}
